﻿using Aurora.AI.Abstractions.ObjectModels.RequestModels;
using Aurora.AI.Abstractions.ObjectModels.ResponseModels.ImageResponseModel;

namespace Aurora.AI.Abstractions.Images;

public interface IAuroraAIImageService
{
    /// <summary>Creates an image given a prompt.</summary>
    /// <param name="imageCreate"></param>
    /// <param name="cancellationToken">Propagates notification that operations should be canceled.</param>
    /// <returns></returns>
    Task<ImageCreateResponse> CreateImage(
        AuroraAIImageCreateRequest imageCreate,
        AuroraAIPlatformOptions? options = null,
        CancellationToken cancellationToken = default);

    /// <summary>
    ///     Creates an edited or extended image given an original image and a prompt.
    /// </summary>
    /// <param name="imageEditCreateRequest"></param>
    /// <param name="cancellationToken">Propagates notification that operations should be canceled.</param>
    /// <returns></returns>
    Task<ImageCreateResponse> CreateImageEdit(
        AuroraAIImageEditCreateRequest imageEditCreateRequest,
        AuroraAIPlatformOptions options = null,
        CancellationToken cancellationToken = default);

    /// <summary>Creates a variation of a given image.</summary>
    /// <param name="imageEditCreateRequest"></param>
    /// <param name="cancellationToken">Propagates notification that operations should be canceled.</param>
    /// <returns></returns>
    Task<ImageCreateResponse> CreateImageVariation(
        AuroraAIImageVariationCreateRequest imageEditCreateRequest,
        AuroraAIPlatformOptions options = null,
        CancellationToken cancellationToken = default);
}